除了一般的程式語言(ex: Java或Golang...)有陣列的型態,PostgreSQL也有提供陣列,讓使用者可以把一群值存在同一個欄位,而且不只是一維陣列,也可以使用二維陣列,今天就來介紹要怎麼在PostgreSQL使用陣列。
如果要在新增 table 的時候使用陣列,例如要在 employee
新增陣列的欄位紀錄員工每年的職等和薪資變化,只要在 CREATE TABLE
的時候,把型態宣告成陣列,並指定陣列的型別即可。跟一般程式語言一樣,PostgreSQL 的陣列也需要先指定型別,但不同的是,宣告的時候是一維陣列,INSERT
的時候卻可以給二維陣列,如果很確定資料就是以二維的方式儲存,當然也可以直接宣告成二維陣列。
CREATE TABLE employee(
empolyee_id integer NOT NULL DEFAULT nextval('table_empolyee_id_seq'),
identity_id varchar(7),
salary_record decimal[],
last_update timestamp with time zone
);
要把資料塞到 table 的時候,需要使用 Array
這個 keyword 讓資料庫可以辨識資料的類型是 array 。
INSERT INTO employee(identity_id, salary_record, last_update)
VALUES ('R123456', Array[[1, 45000.5], [1, 46000.3], [2, 50000.25]], '2024-01-05 21:35:25');
INSERT
完之後,就可以撈取資料,看到這個欄位放的陣列資料。
SELECT * FROM employee
雖然在 CREATE TABLE
的時候已經定義好 salary_record
的型別是 decimal
,但是查詢資料的時候,還是可以指定其他型別,讓資料庫幫你轉型。舉例來說,把 salary_record
的資料轉成 int
,只要在 SELECT
的時候對 salary_record
加上?::int[]
進行轉型,結果就會換轉成 int
。
SELECT salary_record::int[] FROM employee
轉型完之後可以發現,後面的小數點會被四捨五入。
這邊需要注意的是,PostgreSQL 有提供很多資料型別,但不是型別之間都可以互相轉換,例如 decimal
就無法轉成 date
,PostgreSQL 會跳出 cannot cast type
的錯誤訊息。